
package logicBusiness;


import DAO.AsignaturaDao;
import models.Asignatura;
import java.util.List;
import javax.persistence.*;

public class AsignaturaBL {

    private int ok = 0;

    public int crearAsignatura(Integer idProfesor, String nombreAsignatura, Integer intensidadHoraria, Integer idGrado, Integer idArea, Integer idLaboratorio) {
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);

        em.getTransaction().begin();
        Asignatura as = dao.crearAsignatura(idProfesor, nombreAsignatura, intensidadHoraria, idGrado, idArea, idLaboratorio);
        em.getTransaction().commit();
        em.close();
        emf.close();
        if (as == null) {
            ok = 0;
        }
//        else if (as.getNombreAsignatura().equals(nombreAsignatura)) {
//            ok = 1;
//        }

        return ok;
    }

    public Asignatura instanciarAsignatura(Object objeto) {
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        em.getTransaction().begin();
        Asignatura ar = dao.intanciarAsignatura(objeto);
        em.getTransaction().commit();
        em.close();
        emf.close();
        return ar;
    }

    public void borrarAsignatura(Integer idAsignatura) {
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        em.getTransaction().begin();
        dao.borrarAsignatura(idAsignatura);
        em.getTransaction().commit();
        em.close(); //quitar cuando se tenga montado el serv
        emf.close();//quitar cuando se tenga montado el serv
    }

    public int encontrarAsignatura(Integer idAsignatura) {
        // find an user
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        Asignatura as = dao.encontrarAsignatura(idAsignatura);
        em.close(); //quitar cuando se tenga montado el serv
        emf.close();//quitar cuando se tenga montado el serv

        if (as == null) {
            ok = 0;
        } else if (as.getIdAsignatura().equals(idAsignatura)) {
            ok = 1;
        }
        return ok;

    }

    public int encontrarAsignatura(String nombreAsignatura, Integer idGrado) {
        // find an user
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        Asignatura as = dao.encontrarAsignatura(nombreAsignatura, idGrado);
        em.close(); //quitar cuando se tenga montado el serv
        emf.close();//quitar cuando se tenga montado el serv
        if (as == null) {
            ok = 0;
        }
//        else if (as.getNombreAsignatura().equals(nombreAsignatura)) {
//            ok = as.getIdAsignatura();
//        }
        return ok; //retorna 0 si no encontro nada y retorna el id de la asignatura si encontro una asignatura

    }

    public Asignatura consultarAsignatura(String nombreAsignatura, Integer idGrado) {
        // find an user
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        Asignatura as = dao.encontrarAsignatura(nombreAsignatura, idGrado);
        em.close(); //quitar cuando se tenga montado el serv
        emf.close();//quitar cuando se tenga montado el serv
        return as;
    }

    public int actualizarAsignatura(String nombreAsignaturaAntiguo, Integer idGradoAntiguo, String nombreAsignaturaNuevo, Integer intensidadHorariaNuevo, Integer idGradoNuevo, String nombreAreaNuevo) {
        // find an user
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        em.getTransaction().begin();
        Asignatura as = dao.actualizarAsignatura(nombreAsignaturaAntiguo, idGradoAntiguo, nombreAsignaturaNuevo, intensidadHorariaNuevo, idGradoNuevo, nombreAreaNuevo);
        em.getTransaction().commit();
        em.close(); //quitar cuando se tenga montado el serv
        emf.close();//quitar cuando se tenga montado el serv
        if (as == null) {
            ok = 0;
        }
//        else if (as.getNombreAsignatura().equals(nombreAsignaturaNuevo) && as.getIdGrado().equals(idGradoNuevo) && as.getIntensidadHoraria().equals(intensidadHorariaNuevo)) {
//            ok = 1;
//        }
        return ok;

    }

    public List consultarAsignaturas() {

        List results;
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        results = dao.encontrarAsignaturas();
        em.close(); //quitar cuando se tenga montado el serv
        emf.close();//quitar cuando se tenga montado el serv
        return results;
    }

    public List consultarAsignaturasArea(String nombreArea) {

        List results;
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        results = dao.encontrarAsignaturasArea(nombreArea);
        em.close(); //quitar cuando se tenga montado el serv
        emf.close();//quitar cuando se tenga montado el serv
        return results;
    }

    public List consultarAsignaturasId() {

        List results;
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        results = dao.encontrarAsignaturasId();
        em.close(); //quitar cuando se tenga montado el serv
        emf.close();//quitar cuando se tenga montado el serv
        return results;
    }

    public List consultarAsignaturasAreaGrado(String nombreArea, Integer idGrado) {
        List results;
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        results = dao.encontrarAsignaturasAreaGrado(nombreArea, idGrado);
        em.close(); //quitar cuando se tenga montado el serv
        emf.close();//quitar cuando se tenga montado el serv
        return results;


    }

    public void persist(Object object) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        try {
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            e.printStackTrace();
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

    public List consultarAsignaturasGrado(int idGrado) {
        List results;
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        results = dao.encontrarAsignaturasGrado(idGrado);
        em.close();
        emf.close();
        return results;
    }

    public Integer encontrarAsignatura(String nombreAsignatura) {
        EntityManagerFactory emf =
                Persistence.createEntityManagerFactory("sischoolPU");
        EntityManager em = emf.createEntityManager();
        AsignaturaDao dao = new AsignaturaDao(em);
        Asignatura asig = dao.encontrarAsignatura(nombreAsignatura);
        em.close(); 
        emf.close();
        if (asig != null) {
            return asig.getIdAsignatura();
        } else {
            return -1;
        }
    }
}


